﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Entidades;

namespace Acceso_a_Datos
{
    public class GrillaDatos
    {
        public List<GrillaEntidades> ObtenerTodas()
        {           
            string consulta = "SELECT IdGrilla, NombreGrilla, IdUsuario, Imagen FROM Grillas";                        
            ConexionBD conexion = new ConexionBD();
            DataTable tablaDatos = conexion.SelectQuery(consulta, null);
            List<GrillaEntidades> grillas = new List<GrillaEntidades>();
            
            foreach (DataRow fila in tablaDatos.Rows)
            {
                GrillaEntidades grilla = new GrillaEntidades();
                grilla.IdGrilla = fila.Field<int>("IdGrilla");
                grilla.NombreGrilla = fila.Field<string>("NombreGrilla");
                grilla.IdUsuario = fila.Field<int>("IdUsuario");
                grilla.Imagen = fila.Field<string>("Imagen");
                
                grillas.Add(grilla);
            }

            return grillas;
        }

        public GrillaEntidades ObtenerPorIdGrilla(int idGrilla)
        {
            string consulta = "SELECT IdGrilla, NombreGrilla, IdUsuario, Imagen FROM Grillas " +
                "WHERE IdGrilla = @idGrilla";

            SqlParameter[] parametros = new SqlParameter[1];
            parametros[0] = new SqlParameter();
            parametros[0].SqlDbType = SqlDbType.Int;
            parametros[0].ParameterName = "idGrilla";
            parametros[0].Value = idGrilla;

            ConexionBD conexion = new ConexionBD();
            DataTable tablaDatos = conexion.SelectQuery(consulta, parametros);

            if (tablaDatos.Rows.Count > 0)
            {
                GrillaEntidades grilla = new GrillaEntidades();
                grilla.IdGrilla = idGrilla;
                grilla.NombreGrilla = tablaDatos.Rows[0].Field<string>("NombreGrilla");
                grilla.IdUsuario = tablaDatos.Rows[0].Field<int>("IdGrilla");
                grilla.Imagen = tablaDatos.Rows[0].Field<string>("Imagen");

                return grilla;
            }
            else
                return null;            
        }

        public List<GrillaEntidades> ObtenerPorIdUsuario(int idUsuario)
        {
            string consulta = "SELECT IdGrilla, NombreGrilla, IdUsuario, Imagen FROM Grillas " +
                "WHERE IdUsuario = @idUsuario";

            SqlParameter[] parametros = new SqlParameter[1];
            parametros[0] = new SqlParameter();
            parametros[0].SqlDbType = SqlDbType.Int;
            parametros[0].ParameterName = "idUsuario";
            parametros[0].Value = idUsuario;

            ConexionBD conexion = new ConexionBD();
            DataTable tablaDatos = conexion.SelectQuery(consulta, parametros);
            List<GrillaEntidades> grillas = new List<GrillaEntidades>();

            if (tablaDatos.Rows.Count > 0)
            {
                foreach (DataRow fila in tablaDatos.Rows)
                {
                    GrillaEntidades grilla = new GrillaEntidades();
                    grilla.IdGrilla = fila.Field<int>("IdGrilla");
                    grilla.NombreGrilla = fila.Field<string>("NombreGrilla");
                    grilla.IdUsuario = fila.Field<int>("IdUsuario");
                    if (!fila.IsNull("Imagen"))
                        grilla.Imagen = fila.Field<string>("Imagen");

                    grillas.Add(grilla);                    
                }

                return grillas;
            }
            else
                return null;            
        }

        public GrillaEntidades ObtenerPorNombre(string nombreGrilla)
        {
            string consulta = "SELECT IdGrilla, NombreGrilla, IdUsuario, Imagen FROM Grillas"
                + " WHERE NombreGrilla = @nombreGrilla";

            SqlParameter[] parametros = new SqlParameter[1];
            parametros[0] = new SqlParameter("nombreGrilla", nombreGrilla);

            ConexionBD conexion = new ConexionBD();
            DataTable tablaDatos = conexion.SelectQuery(consulta, parametros);

            if (tablaDatos.Rows.Count > 0) 
            {
                GrillaEntidades grillaEnt = new GrillaEntidades();

                grillaEnt.IdGrilla = tablaDatos.Rows[0].Field<int>("IdGrilla");
                grillaEnt.NombreGrilla = tablaDatos.Rows[0].Field<string>("NombreGrilla");
                grillaEnt.IdUsuario = tablaDatos.Rows[0].Field<int>("IdUsuario");
                if (tablaDatos.Rows[0].IsNull("Imagen"))
                    grillaEnt.Imagen = tablaDatos.Rows[0].Field<string>("Imagen");

                return grillaEnt;
            }
            else
                return null;
        }

        public void Insertar(GrillaEntidades grilla)
        {
            string consulta = "INSERT INTO Grillas VALUES "
                + "(@nombreGrilla, @idUsuario, @imagen)";

            SqlParameter[] parametros = new SqlParameter[3];            
            parametros[0] = new SqlParameter("nombreGrilla", grilla.NombreGrilla);
            parametros[1] = new SqlParameter("idUsuario", grilla.IdUsuario);
            if (grilla.Imagen == null)
                parametros[2] = new SqlParameter("imagen", DBNull.Value);
            else
                parametros[2] = new SqlParameter("imagen", grilla.Imagen);

            ConexionBD conexion = new ConexionBD();
            conexion.ExecuteNonQuery(consulta, parametros);
        }

        public void Actualizar(GrillaEntidades grilla)
        {
            string consulta = "UPDATE Grillas "
                + "SET NombreGrilla = @nombreGrilla, IdUsuario = @idUsuario, Imagen = @imagen "
                + "WHERE IdGrilla = @idGrilla";

            SqlParameter[] parametros = new SqlParameter[3];
            parametros[0] = new SqlParameter("nombreGrilla", grilla.NombreGrilla);
            parametros[1] = new SqlParameter("idUsuario", grilla.IdUsuario);
            if (grilla.Imagen == null)
                parametros[2] = new SqlParameter("imagen", DBNull.Value);
            else
                parametros[2] = new SqlParameter("imagen", grilla.Imagen);


            ConexionBD conexion = new ConexionBD();
            conexion.ExecuteNonQuery(consulta, parametros);
        }
    }
}
